package com.small.common.util;

import org.apache.commons.lang3.StringUtils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.UUID;

/**
 * 作者: fenny
 * 邮箱: 893146555@qq.com
 * 时间: 2017/10/20 10:59
 * 描述: String 工具类
 */
public class StringHelper {

    public static String[] split(String list, String seperators) {
        return split(list, seperators, false);
    }

    public static String[] split(String list, String seperators, boolean include) {
        StringTokenizer tokens = new StringTokenizer(list, seperators, include);
        String[] result = new String[tokens.countTokens()];
        for (int i = 0; tokens.hasMoreTokens(); result[i++] = tokens.nextToken()) {
        }
        return result;
    }

    /**
     * @param object o
     * @return object转String
     */
    public static String getString(Object object) {
        return getString(object, "");
    }

    public static String getString(Object object, String defaultValue) {
        if (null == object) {
            return defaultValue;
        }
        try {
            return object.toString();
        } catch (Exception e) {
            return defaultValue;
        }
    }

    /**
     * 获得32位随机字符串（UUID）
     *
     * @return 获得字符
     */
    public static String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 将参数用=成对,&连接起来
     * 空值不参与拼装
     *
     * @param parameters 需要拼接的参数
     * @return a=b&c=d
     */
    public static String handleParams(Map<String, Object> parameters) {
        return handleParams(parameters, "=", "&", null, false);
    }

    /**
     * 将map中的key|value 通过equals成对,join拼接成字符串返回
     * 可以设置编码格式|可以配置是否拼接空值
     *
     * @param parameters 需要拼接的参数
     * @param equals     key=value 等于符号,设置=
     * @param join       key=value& 连接符号,设置&
     * @param encoding   编码格式
     * @param flag       是否对空值进行拼接
     * @return key[equals]value[join] 忽略[],最后没有[join]
     */
    public static String handleParams(Map<String, Object> parameters, String equals, String join, String encoding, boolean flag) {
        StringBuilder param = new StringBuilder();
        for (String key : parameters.keySet()) {
            Object value = parameters.get(key);
            String v = value == null ? "" : value.toString();
            if (flag || StringUtils.isNotEmpty(v)) {
                buildParams(param, key, v, equals, join, encoding);
            }
        }
        if (param.length() > 0 && join.length() > 0) {
            param.deleteCharAt(param.length() - 1);
        }
        return param.toString();
    }

    /**
     * 将key|value 通过equals成对,join拼接成字符串返回
     *
     * @param param    构建结果
     * @param k        map key
     * @param v        map value
     * @param equals   key=value 等于符号,设置=
     * @param join     key=value& 连接符号,设置&
     * @param encoding 对值进行何种编码方式
     */
    private static void buildParams(StringBuilder param, String k, String v, String equals, String join, String encoding) {
        param.append(k).append(equals);
        if (StringUtils.isEmpty(encoding)) { //不对参数进行编码
            param.append(v);
        } else {
            try {
                param.append(URLEncoder.encode(v, encoding));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        param.append(join);
    }

    /**
     * 处理短信内容
     *
     * @param content 内容
     * @param code    验证码
     * @return 组装好的值
     */
    public static String executeSmsContent(String content, String... code) {
        String temp;
        for (int i = 0; i < code.length; i++) {
            temp = "{" + i + "}";
            content = content.replace(temp, code[i]);
        }
        return content;
    }

    /**
     * @return 返回6位随机数字
     */
    public static String getValCode() {
        return String.valueOf((int) ((Math.random() * 9 + 1) * 100000));
    }
}
